gpt4 book ai didi

java - Mysql数据库编码问题

转载 作者:行者123 更新时间:2023-11-29 03:46:18 24 4
gpt4 key购买 nike

我在 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;

我还有一个在 Ubuntu 10.10 上运行的 Java 应用程序,它在这个由 Connector/J 5.1.14 接口(interface)的表中写入记录。插入记录是使用 Prepared Statement 类完成的。

当为标记的字符插入几条不同的记录时(例如('aki kaurismäki','aki kaurismäki')和('aki kaurismaki','aki kaurismaki')),我在第二条记录上出现重复键异常.我尝试在执行前在 PreparedStatement 中打印查询,它似乎是正确的(我尝试从 mysql 命令行客户端手动执行此查询并收到任何错误)。

我该如何解决这个问题?提前致谢,安东尼奥

最佳答案

这是因为 - 正如评论中所说 - mySQL 的 Unicode 编码在内部比较中规范化重音字符,导致

 kaurismäki = kaurismaki

来自 manual :

To further illustrate, the following equalities hold in both utf8_general_ci and utf8_unicode_ci (for the effect this has in comparisons or when doing searches, see Section 9.1.7.8, “Examples of the Effect of Collation”):

Ä = A 
Ö = O
Ü = U

按我的理解,制作索引列ucs2_bin应该可以解决了。二进制比较不会规范化重音字符。

关于java - Mysql数据库编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4699735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com