java 字符串与 mysql 字符串

标签 java mysql string character-encoding

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 的默认字符集,对吧?)为什么我仍然得到不一致的长度值?

最佳答案

mySql 函数“CHAR_LENGTH()”返回#/Unicode 字符(如 Java 的“.length”)。

MySQL 函数“LENGTH()”返回#/bytes。

这是 MySQL 引用:

关于java 字符串与 mysql 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10326663/

相关文章:

mysql - 更好的方式存储 friend 和检索特定用户的 friend

java - 除非分隔符受引号或括号保护,否则如何拆分字符串?

java - Java 中用于唯一 ID 的序列生成器

java - ant中如何复制目录

java - 从数据库加载详细信息时出现游标错误

mysql - MySQL 的锁定和并发

mysql - SQL会计系统中的分层汇总

string - Python 连接字符串以生成字符串中所有单词的组合

java - 有没有半自动的方法来为 i18n 执行字符串提取?

java - 处理来自rabbitmq错误队列的消息