Bug #29350 | charset() and collation() return 'binary' incorrectly | ||
---|---|---|---|
Submitted: | 26 Jun 2007 4:20 | Modified: | 5 Sep 2007 1:09 |
Reporter: | Yoshiaki Tajika (Basic Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Charsets | Severity: | S2 (Serious) |
Version: | 5.0.46-BK, 5.0.37 | OS: | Any |
Assigned to: | Alexander Barkov | CPU Architecture: | Any |
[26 Jun 2007 4:20]
Yoshiaki Tajika
[26 Jun 2007 6:33]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described both with 5.0.37 on Windows and with latest 5.0.46-BK on Linux: openxs@linux:~/dbs/5.0> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.46-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE VIEW v AS SELECT CHARSET(CHAR(65)), COLLATION(CHAR(65)); Query OK, 0 rows affected (0.01 sec) mysql> set names 'latin1'; Query OK, 0 rows affected (0.00 sec) mysql> select * from v; +-------------------+---------------------+ | CHARSET(CHAR(65)) | COLLATION(CHAR(65)) | +-------------------+---------------------+ | binary | binary | +-------------------+---------------------+ 1 row in set (0.00 sec) And what is the reason? Let's check: mysql> select charset('A'); +--------------+ | charset('A') | +--------------+ | latin1 | +--------------+ 1 row in set (0.01 sec) mysql> select charset(65); +-------------+ | charset(65) | +-------------+ | binary | +-------------+ 1 row in set (0.00 sec) mysql> select charset(char(65)), char(65); +-------------------+----------+ | charset(char(65)) | char(65) | +-------------------+----------+ | binary | A | +-------------------+----------+ 1 row in set (0.00 sec) So, looks like charset (and collation) is just not determined correctly now for char(X). char(X) should return a char in current character set, not binary!
[4 Sep 2007 17:31]
Alexander Barkov
The problem is that the manual is not up to date. Some times ago, a new syntax was introduced: CHAR(x USING csname) - to return a string with the given character set. At the same time, a change was made that CHAR(x) without the USING clause returns always a binary string. This manual section should be fixed. To doc team: Setting the bug into "documenting" state. Please takeover this bug.
[5 Sep 2007 1:09]
Paul DuBois
CHAR() no longer makes a good example here because it returns binary strings. I replaced the example wiith one that modifies the SQL mode and thus changes the view result: mysql> CREATE VIEW v (mycol) AS SELECT 'abc'; Query OK, 0 rows affected (0.01 sec) mysql> SET sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> SELECT "mycol" FROM v; +-------+ | mycol | +-------+ | mycol | +-------+ 1 row in set (0.01 sec) mysql> SET sql_mode = 'ANSI_QUOTES'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT "mycol" FROM v; +-------+ | mycol | +-------+ | abc | +-------+ 1 row in set (0.00 sec)