java.sql.SQLException:使用JDBC的MySQL字符串值不正确

时间:2015-03-27 21:06:36

标签: mysql jdbc utf-8

我为我的项目使用MySQL数据库。我想用jdbc保存数据。但是有一些字符有问题。例如ğ,ş。我的连接网址在下面。

jdbc:mysql://localhost:3306/kutuphane useUnicode=true&characterEncoding=UTF-8

但是我得到了java.sql.SQLException:错误的字符串值:'\ xC4 \ x9F \ xC4 \ x9F \ xC4 \ x9F'错误。我已尝试过该站点中的所有方法,但它没有解决问题。即使它保存,此时记录的字符是失败的。没有显示ğ,ş等它是不是一个mysql bug?

2 个答案:

答案 0 :(得分:1)

  

字符串值不正确:'\ xC4 \ x9F \ xC4 \ x9F \ xC4 \ x9F'

您正尝试将UTF-8字符插入无法接受它们的列中。您必须确保的COLLATION(字符集)与UTF-8兼容。

该列设置可能已经明确设置,或者它可能刚刚使用了表的默认设置(可能使用或未使用数据库的默认值,而数据库可能使用或未使用默认值服务器的价值)。

SHOW CREATE TABLE tablename会告诉您当前的设置是什么。如果你看到像

这样的东西
CREATE TABLE `utf8test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `textcol` varchar(50) COLLATE latin1_general_cs DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs

然后,在您执行

之类的操作之前,您将无法将任意UTF-8字符插入textcol
ALTER TABLE utf8test 
    CHANGE COLUMN textcol textcol VARCHAR(50) COLLATE utf8_general_ci

答案 1 :(得分:0)

MySQL默认支持utf8,其中字符由3个字符表示。对于4字节字符,您需要改用utf8mb4。