sql >> Database teknologi >  >> RDS >> Mysql

Hvad sker der med MySQL heltals felt matchende streng?

Streng konverteres altid til 0 sammenlignet med numerisk (selvfølgelig konverteres streng, der indeholder numerisk + streng, numerisk. men dette er ikke god praksis)

mysql> SELECT 'Yes' + 0;
+-----------+
| 'Yes' + 0 |
+-----------+
|         0 |
+-----------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------+
| Level   | Code | Message                                 |
+---------+------+-----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'Yes' |
+---------+------+-----------------------------------------+

Hvis du ønsker at lagre binær værdi (Ja/Nej eller Sand/False) eller lille værdi indstillet, ENUM er et godt valg. Det tager lille diskplads og kan bruge meningsfuld streng.

mysql> CREATE TABLE enum_test(a ENUM('Yes', 'No'));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into enum_test values('Yes'), ('No'), ('Invalid');
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 1

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'a' at row 3 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

mysql> select * from enum_test where a = 'Yes';
+------+
| a    |
+------+
| Yes  |
+------+
1 row in set (0.00 sec)

mysql> select * from enum_test where a = 'No';
+------+
| a    |
+------+
| No   |
+------+
1 row in set (0.00 sec)



  1. Hvordan kan jeg i SQL Server låse en enkelt række på en måde, der ligner Oracles SELECT FOR UPDATE WAIT?

  2. Tilslutning af IBM DB2 med IRI-software

  3. En løsning til:Markører understøttes ikke på en tabel, som har et klynget kolonnelagerindeks

  4. Sådan bruger du Crosstab Query Wizard i Access