tomcat/jdbc/mysql: 可以插入 ÿ(U+00FF) 但不能插入 Ā (U+0100)
Posted
技术标签:
【中文标题】tomcat/jdbc/mysql: 可以插入 ÿ(U+00FF) 但不能插入 Ā (U+0100)【英文标题】:tomcat/jdbc/mysql: can insert ÿ(U+00FF) but not Ā (U+0100) 【发布时间】:2011-02-05 17:38:34 【问题描述】:我的设置:
mysql 5.1
显示变量: | character_set_client | utf8 |字符集连接 | utf8 |字符集数据库 | utf8 |字符集文件系统 |二进制 |字符集结果 | utf8 | character_set_server | utf8 |字符集系统 | utf8 |字符集目录 | D:\Programme\MySQL\MySQL 服务器 5.1\share 字符集\ | collation_connection | utf8_general_ci | collation_database | utf8_unicode_ci |排序服务器 | utf8_general_ci 甚至 |初始化连接 | SET collation_connection = utf8_general_ci;设置名称 utf8;
表table有utf8字符集
tomcat 6.0
jdbc 连接器使用 characterEncoding="utf8" useUnicode="true"
当我尝试时
stmt.execute("UPDATE *table* SET *value*=\"ÿ\" WHERE ...)
它有效,但对于
stmt.execute("UPDATE *table* SET *value*=\"Ā\" WHERE ...)
我得到一个
java.sql.SQLException:字符串值不正确:列的“\xC4\x80” 第 1 行的“值”
此外,它适用于 ÿ 以下的所有字符,可以用 1 个字节编码,但只要需要 2 个字节:砰!
为什么会这样?我怎样才能让它工作?
【问题讨论】:
【参考方案1】:在我添加了另外两个表以检查它是否是 MyISAM 与 InnoDB 的问题之后,它只是在新表上工作,为什么?
在新表中,每列使用默认字符集,而在我现有的表中,每列的字符集设置为 latin1。这是因为我从非 utf8 mysql 实例复制了 db,并手动将表字符集更改为 utf-8。但是在复制时,HeidiSQL 向每一列添加了一个“CHARACTER SET latin1”,该列在更改字符集时没有更改,并且在 HeidiSQL 中不太容易看到列具有单独的字符集...
【讨论】:
以上是关于tomcat/jdbc/mysql: 可以插入 ÿ(U+00FF) 但不能插入 Ā (U+0100)的主要内容,如果未能解决你的问题,请参考以下文章