Mengapa hanya ada nama lajur tetapi tidak sama dengan nilai dalam MySQL? Ini bukan ralat sintaks
P粉481815897
P粉481815897 2023-09-16 10:37:20
0
1
677

Mengapa pertanyaan sedemikian bukan ralat sintaks? Saya mempunyai latar belakang SQL Server dan saya sangat terkejut.

从 my_table WHERE id 中选择 *

Saya fikir ia akan mengesahkan bahawa ia mempunyai nilai, tetapi tingkah lakunya tidak konsisten, apabila menggunakan id ia mengembalikan lokasi dengan id , tetapi apabila menggunakan nama ia tidak mengembalikan apa-apa:

https://www.db-fiddle.com/f/enWGyAW4BtLC64PVzkbTVK/0

P粉481815897
P粉481815897

membalas semua(1)
P粉511896716

MySQL mempunyai beberapa tingkah laku yang tidak mematuhi standard ANSI SQL. Dalam kes ini, MySQL menganggap nilai sifar integer sebagai false,将任何整数非零值视为 true. Dalam SQL standard, integer tidak sama dengan boolean, tetapi dalam MySQL ia adalah.

Apabila anda menjalankan pertanyaan WHERE id时,它会返回id 0 baris.

Apabila anda menjalankan pertanyaanWHERE name, ia menilai rentetan sebagai integer, yang bermaksud mengambil nilai berangka aksara angka terkemuka (jika ada) dan mengabaikan sebarang aksara bukan angka berikutnya. Jika tiada digit pendahuluan, rentetan mempunyai nilai integer 0.

Apabila anda menjalankan pertanyaanWHERE name时,仅当该列中存储的字符串具有非零前导数字时,它才会返回行。在您的示例 'outro', ia akan mengembalikan baris hanya jika rentetan yang disimpan dalam lajur itu mempunyai nombor pendahuluan bukan sifar. Dalam contoh anda 'outro' ia hanya mempunyai bukan digit, jadi nilainya adalah sifar dan syaratnya tidak boleh dipenuhi.

MySQL berkelakuan seperti yang direka, tetapi ia bukan SQL standard.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan