Rumah  >  Soal Jawab  >  teks badan

Mengapa hanya ada nama lajur tetapi tidak sama dengan nilai dalam MySQL? Ini bukan ralat sintaks

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粉481815897P粉481815897399 hari yang lalu623

membalas semua(1)saya akan balas

  • P粉511896716

    P粉5118967162023-09-17 00:12:37

    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.

    balas
    0
  • Batalbalas