java字符串与mysql字符串
============================= 然后我有一段java代码java字符串与mysql字符串,java,mysql,string,character-encoding,Java,Mysql,String,Character Encoding,============================= 然后我有一段java代码 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.4
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)
这将给
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));
我不明白为什么长度不同。我显式地将数据库的字符集设置为UTF16(这是Java的默认字符集,对吗?)为什么仍然得到不一致的长度值?Java的默认字符集不是UTF-16,它的语言环境
如果您想在Java中更改字符集,则必须在JVM启动之前进行更改,否则将使用依赖于语言环境的defaultCharset值。尝试使用UTF-16编码进行连接:
java length: 16
mysql length: 32
我猜Java ios报告字符数,而MySQL报告用于存储字符的字节数。MySQL函数“CHAR#u LENGTH()”返回#/Unicode字符(类似于Java的“.LENGTH”) MySQL函数“LENGTH()”返回#/字节 以下是MySQL参考:
str
的长度,以字节为单位。多字节
字符计数为多个字节。这意味着对于字符串
包含五个双字节字符,LENGTH()返回10,而
CHAR_LENGTH()返回5
也许你需要的是
返回字符串str
的长度,以字符为单位。A.
多字节字符计为单个字符。这意味着
包含五个双字节字符的字符串,LENGTH()返回10,
而CHAR_LENGTH()返回5
Connection connection = DriverManager.getConnection(url+"?characterEncoding=UTF-16", usr, pass);