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 字符集\ | 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 个字节:砰!

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于tomcat/jdbc/mysql: 可以插入 ÿ(U+00FF) 但不能插入 Ā (U+0100)的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中删除 ÿþ

游戏逆向FPS游戏玩家对象数据分析

检测编码并使一切变为 UTF-8

nodejs将原始图像数据写入jpeg文件?

å

从数据库中选择双拼音域名