| Bug #12774 | Function UUID() and REPLACE(), can't work together | ||
|---|---|---|---|
| Submitted: | 24 Aug 2005 3:00 | Modified: | 26 Aug 2005 13:01 |
| Reporter: | Poh Chuan Sim | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 4.1.13, 5.0.11 | OS: | Windows (Windows XP SP2) |
| Assigned to: | CPU Architecture: | Any | |
[24 Aug 2005 3:00]
Poh Chuan Sim
[24 Aug 2005 7:28]
Vasily Kishkin
Thanks for bug report. For quick solution I can suggest: SELECT REPLACE(CAST(UUID() as char character set utf8), '-', ''); or SELECT REPLACE(CAST(UUID() as char character set latin1), '-', ''); Could you please write here result of follow query: show variables like "char%";
[25 Aug 2005 0:46]
Poh Chuan Sim
OK, this is my result: +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 4.1\share\charsets/ | +--------------------------+---------------------------------------------------------+
[26 Aug 2005 13:01]
Valeriy Kravchuk
The same behaviour was repeated with newer 4.1.13 and 5.0.11 versions.
It is not a bug, really. Just happened so that your character_set_system is utf8 and your character_set_client (used for second argument of replace) is not (latin1). It can be changed globally, for example, with the following mysql.exe startup option:
C:\Documents and Settings\openxs>mysql --default-character-set=utf8 -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 49 to server version: 4.1.13a-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT REPLACE(UUID(), '-', '');
+----------------------------------+
| REPLACE(UUID(), '-', '') |
+----------------------------------+
| 11d1781d67811028ad7d9a0f7b3fc933 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> show variables like "char%";
+--------------------------+----------------------------------------------------
-----+
| Variable_name | Value
|
+--------------------------+----------------------------------------------------
-----+
| character_set_client | utf8
|
| character_set_connection | utf8
|
| character_set_database | cp1251
|
| character_set_results | utf8
|
| character_set_server | cp1251
|
| character_set_system | utf8
|
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 4.1\share\chars
ets/ |
+--------------------------+----------------------------------------------------
-----+
7 rows in set (0.00 sec)
You may post a feature request (convert latin1 to utf8 in such cases) or ask about clear description of the character_set used for the result of UUID(), though.
[18 Jul 2018 3:03]
zhang zhe
question is not uuid() and replace() can't work together, if you try concat(),and other string function ; The unexpect result came out because there are inexplicit conversion happend when your charset client and charset result is not utf8; 1 uuid()output is utf8, no matter what your charset is 2 when your charset client and charset result is some of high priority than utf8 such as utf8mb4 , then the inexplicit conversion happen,other lower priority charset like latin1 that work fine 3 inexplicit conversion will ture uuid() into constant string before sql execute, so after sql execute finish , the same uuid() return you can see all these happend by using explain extend + your clause ,and then using show warnings; how to solve ? 1 turn inexplicit convertion to explicit convertion for example : set names utf8mb4; replace( convert(uuid() using utf8mb4), '-','') or set names utf8; replace( uuid(),_utf8'-',_utf8'') 2 aviod inexplicit convertion for example : set names utf8
[18 Jul 2018 3:08]
zhang zhe
sorry i make a mistake the second example set names utf8; replace( uuid(),_utf8'-',_utf8'') modify to set names utf8mb4; replace( uuid(),_utf8'-',_utf8'')
[18 Jul 2018 3:11]
zhang zhe
explain extend modify to explain extended
