sql >> Databasteknik >  >> RDS >> Mysql

UPPDATERA mysql op fungerar inte med cc-nummer

Ett kreditkortsnummer är inte ett "nummer" i matematisk mening, det råkar bara vara en rad siffror. Du behöver aldrig fråga "vad är detta kortnummer plus ett?" eller "... gånger två?", men du kanske vill fråga "vilka är de fyra första siffrorna i detta kortnummer?" eller "de fyra senaste...?"

Om du behandlar det som ett nummer, kommer det att vara ett tal mycket större än vad du normalt skulle arbeta med:4444333333322221111 (ett Visa-testkortnummer) är "4 quadrillion 444 biljoner 333 miljarder 322 miljoner 221 tusen 1 hundra och 11".

Viktigt är att det största numret som kan lagras i ett signerat 32-bitars heltal - vilket är vad du får när du anger "int" i SQL - är bara mer än 2 miljarder, så ett kortnummer kommer inte i närheten av att passa. Din databas kommer antingen att ge dig ett fel eller bara lagra något annat nummer som passar - i ditt fall lagrar det bara det högsta numret det kan.

Du kan ändra din kolumn till en "bigint" (64-bitars signerad, maximalt värde runt 9 quintillioner), men du är bättre att behandla dem som strängar i din PHP och VarChar i din databas.




  1. Hur beställer man efter varchar-fält som nummer?

  2. mysql skickar data till in

  3. pdo execute gives fel

  4. Hur implementerar jag den här mySQL-frågan korrekt i en PHP-fil och visar resultaten?