mysql> CREATE database testing CHARACTER SET utf16;
Query OK, 1 row affected (0.00 sec)
mysql> USE testing;
Database changed
mysql> CREATE TABLE t (str varchar(64));
Query OK, 0 rows affected (0.43 sec)
mysql> INSET INTO t values ("1234567891234567");
Query OK, 1 row affected (0.00 sec)=============================
然后我有一段java代码。
Connection connection = DriverManager.getConnection(url, usr, pass);
Statement statement = connection.createStatement();
statement.execute("USE testing");
ResultSet rst = statement.executeQuery("SELECT str, LENGTH(str) FROM t;");
while (rst.next())
System.out.print("java length: " + rst.getString(1).length()
+ "\nmysql length: " + rst.getInt(2));这将会给出
java length: 16
mysql length: 32我不明白为什么长度会不一样。我显式地将数据库的字符集设置为UTF16 (这是Java的默认字符集,对吧?)为什么我仍然得到不一致的长度值?
发布于 2012-04-26 11:11:43
mySql函数"CHAR_LENGTH()“返回#/Unicode字符(类似于Java的".length")。
长度函数“MySQL ()”返回#/字节。
下面是MySQL参考:
发布于 2012-04-26 11:12:53
Mysql LENGTH(str)
返回字符串
str的长度,以字节为单位。多字节字符计入多个字节。这意味着对于包含5个双字节字符的字符串,LENGTH()返回10,而CHAR_LENGTH()返回5。
也许你需要的是CHAR_LENGTH(str)
返回字符串
str的长度,以字符为单位。多字节字符计入单个字符。这意味着对于包含5个双字节字符的字符串,LENGTH()返回10,而CHAR_LENGTH()返回5。
发布于 2012-04-26 11:10:00
Java的默认字符集不是UTF-16,它的语言环境dependent。
如果你想在java语言中改变字符集,那么你必须在JVM启动之前完成,否则将使用依赖于语言环境的defaultCharset的值。
https://stackoverflow.com/questions/10326663
复制相似问题