【问题标题】:tomcat/jdbc/mysql: can insert ÿ(U+00FF) but not Ā (U+0100)tomcat/jdbc/mysql: 可以插入 ÿ(U+00FF) 但不能插入 Ā (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 字符集\
| collat​​ion_connection | utf8_general_ci
| collat​​ion_database | utf8_unicode_ci
|排序服务器 | utf8_general_ci
甚至
|初始化连接 | SET collat​​ion_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 个字节:砰!

为什么会这样?我怎样才能让它工作?

【问题讨论】:

    标签: mysql utf-8


    【解决方案1】:

    在我添加了另外两个表以检查它是否是 MyISAM 与 InnoDB 的问题之后,它只是在新表上工作,为什么?

    在新表中,每列使用默认字符集,而在我现有的表中,每列的字符集设置为 latin1。这是因为我从非 utf8 mysql 实例复制了 db,并手动将表字符集更改为 utf-8。但是在复制时,HeidiSQL 向每一列添加了一个“CHARACTER SET latin1”,该列在更改字符集时没有更改,并且在 HeidiSQL 中不太容易看到列具有单独的字符集...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      相关资源
      最近更新 更多