Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java字符串与mysql字符串_Java_Mysql_String_Character Encoding - Fatal编程技术网

java字符串与mysql字符串

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

=============================

然后我有一段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.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参考:

Mysql

返回字符串
str
的长度,以字节为单位。多字节 字符计数为多个字节。这意味着对于字符串 包含五个双字节字符,LENGTH()返回10,而 CHAR_LENGTH()返回5

也许你需要的是

返回字符串
str
的长度,以字符为单位。A. 多字节字符计为单个字符。这意味着 包含五个双字节字符的字符串,LENGTH()返回10, 而CHAR_LENGTH()返回5

Connection connection = DriverManager.getConnection(url+"?characterEncoding=UTF-16", usr, pass);