首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java字符串与mysql字符串

java字符串与mysql字符串
EN

Stack Overflow用户
提问于 2012-04-26 11:04:21
回答 5查看 478关注 0票数 0
代码语言:javascript
复制
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代码。

代码语言:javascript
复制
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));

这将会给出

代码语言:javascript
复制
java length: 16
mysql length: 32

我不明白为什么长度会不一样。我显式地将数据库的字符集设置为UTF16 (这是Java的默认字符集,对吧?)为什么我仍然得到不一致的长度值?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-26 11:11:43

mySql函数"CHAR_LENGTH()“返回#/Unicode字符(类似于Java的".length")。

长度函数“MySQL ()”返回#/字节。

下面是MySQL参考:

票数 5
EN

Stack Overflow用户

发布于 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。

票数 3
EN

Stack Overflow用户

发布于 2012-04-26 11:10:00

Java的默认字符集不是UTF-16,它的语言环境dependent

如果你想在java语言中改变字符集,那么你必须在JVM启动之前完成,否则将使用依赖于语言环境的defaultCharset的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10326663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档