【发布时间】:2011-01-15 13:10:13
【问题描述】:
我在 Mysql 5.1 架构中有一个表。创建此表的语句为:
CREATE TABLE `prova` (
`id` varchar(150) NOT NULL,
`name` varchar(150) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDb DEFAULT CHARSET=ucs2;
我还有一个 Java 应用程序,在 Ubuntu 10.10 上运行,它在这个由 Connector/J 5.1.14 接口的表中写入记录。插入记录是使用 Prepared Statement 类完成的。
当插入两个标记字符不同的记录时(例如 ('aki kaurismäki','aki kaurismäki') 和 ('aki kaurismaki','aki kaurismaki')),我在第二条记录上出现重复键异常.我尝试在执行前在 PreparedStatement 中打印查询,它似乎是正确的(我尝试从 mysql 命令行客户端手动执行此查询并得到任何错误)。
我该如何解决这个问题? 提前致谢, 安东尼奥
【问题讨论】:
-
这可能是因为
ucs2在比较中内部将重音字符标准化,导致kaurismäki=kaurismaki。我不知道是否有不显示这种行为的 16 位替代字符集 -
感谢 Pekka 的回复 它既不适用于 utf8_general_ci,也不适用于 utf_unicode_ci。在 mysql 命令行客户端中插入的相同查询没有错误,这真的很奇怪..
-
不,这两个排序规则就像 ucs2 一样工作,他们无法解决这个问题。按照以下建议尝试 ucs2_bin
标签: java mysql unicode mysql-connector