mysql> SET sql_mode='TRADITIONAL';
ΠΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ Π²ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π² ΡΡΠΎΠ»Π±Π΅Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (DECIMAL ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ), ΠΎΠ½ΠΎ Π²ΡΡΠ°Π²Π»Π΅Π½ΠΎ Ρ ΡΠΎΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΡΠΎΠ»Π±ΡΠ°.
ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡ Π² Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅, ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ " 1.4. ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ".
ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡ Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ, ΠΎΠ½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΡΠ»ΠΈ ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΠ΅Π½ΠΎ ΠΊ ΡΠ°ΠΌΠΎΠΌΡ Π±Π»ΠΈΠ·ΠΊΠΎΠΌΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ NULL ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. Π‘ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ SQL ERROR_FOR_DIVISION_BY_ZERO MySQL ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ:
ΠΡΠ»ΠΈ ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ, Π²ΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ, Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ, ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²ΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ, ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ERROR_FOR_DIVISION_BY_ZERO Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡΡΠΎΠ³ΠΎΠΌΡ ΡΠ΅ΠΆΠΈΠΌΡ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ:
INSERT INTO t SET i = 1/0;
ΠΡΠΎ ΡΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΡΡΠΎΠ³ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈ ERROR_FOR_DIVISION_BY_ZERO:
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ sql_mode | Π Π΅Π·ΡΠ»ΡΡΠ°Ρ
'' (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) | ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ: i ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² NULL.
strict | ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ: i ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² NULL.
ERROR_FOR_DIVISION_BY_ZERO | ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½ΠΎ Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: i ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² NULL.
strict,ERROR_FOR_DIVISION_BY_ZERO | ΠΡΠΈΠ±ΠΊΠ°: Π½ΠΈΠΊΠ°ΠΊΠ°Ρ ΡΡΡΠΎΠΊΠ° Π½Π΅ Π²ΡΡΠ°Π²Π»Π΅Π½Π°.
ΠΠ»Ρ Π²ΡΡΠ°Π²ΠΎΠΊ ΡΡΡΠΎΠΊ Π² ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ Π² ΡΠΈΡΠ»ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅:
Π‘ΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΈΡΠ»Π°, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ, ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ. ΠΡΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ.
Π‘ΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΈΡΠ»Π°, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π°, Π½ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ Π½Π΅ΡΠΈΡΠ»ΠΎΠ²Π°Ρ ΡΠ°ΡΡΡ ΡΡΠ΅ΡΠ΅Π½Π°. ΠΡΠ»ΠΈ ΡΡΠ΅ΡΠ΅Π½Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΡΠ³ΠΎΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π΅Π»Ρ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ.
1.4. ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ
ΠΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅Ρ ΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ROUND() ΠΈ Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΎΠΊ Π² ΡΡΠΎΠ»Π±ΡΡ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Ρ ΡΠΎΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ ROUND() ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΡΠ½ΡΠΌ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ:
ΠΠ»Ρ ΡΠΈΡΠ»Π° ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ROUND() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ "ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ": Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ .5 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΎ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅, ΠΈΠ»ΠΈ Π΄ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π΅ΡΠ»ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ .5, ΠΎΠΊΡΡΠ³Π»Π΅Π½Ρ Π΄ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, ΠΈΠ»ΠΈ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅.
ΠΠ»Ρ ΡΠΈΡΠ»Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ C. ΠΠ° ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π»ΡΠ±ΠΎΠΉ Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΎ ROUND() ΠΊ ΡΠ°ΠΌΠΎΠΌΡ Π±Π»ΠΈΠ·ΠΊΠΎΠΌΡ ΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ΅Π»ΠΎΠΌΡ ΡΠΈΡΠ»Ρ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΡΠ½ΡΡ ΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
ΠΠ»Ρ Π²ΡΡΠ°Π²ΠΎΠΊ Π² DECIMAL ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ, Π΅ΡΠ»ΠΈ Π°Π΄ΡΠ΅ΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ "ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ" Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»Π΅Π½ΠΎ, ΡΠΎΡΠ½ΡΠΌ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ:
mysql> CREATE TABLE t (d DECIMAL(10,0));
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t VALUES(2.5),(2.5E0);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> SELECT d FROM t;
+------+
| d |
+------+
| 3 |
| 3 |
+------+
1.5. ΠΡΠΈΠΌΠ΅ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ
ΠΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π² MySQL 5.1.
ΠΡΠΈΠΌΠ΅Ρ 1. Π§ΠΈΡΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Ρ ΠΈΡ ΡΠΎΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π°Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ:
mysql> SELECT .1 + .2 = .3;
+--------------+
| .1 + .2 = .3 |
+--------------+
| 1 |
+--------------+
ΠΠ»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΡΠΎΡΠ½Ρ:
mysql> SELECT .1E0 + .2E0 = .3E0;
+--------------------+
| .1E0 + .2E0 = .3E0 |
+--------------------+
| 0 |
+--------------------+
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π² ΡΠΎΡΠ½ΠΎΠΉ ΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΊ ΡΡΠΌΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·. Π Π°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ .0001 ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ 1000 ΡΠ°Π·:
CREATE PROCEDURE p ()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE d DECIMAL(10,4) DEFAULT 0;
DECLARE f FLOAT DEFAULT 0;
WHILE i < 10000 DO
SET d = d + .0001;
SET f = f + .0001E0;
SET i = i + 1;
END WHILE;
SELECT d, f;
END;
Π‘ΡΠΌΠΌΠ° Π΄Π»Ρ d ΠΈ f Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ 1, Π½ΠΎ ΡΡΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ:
+--------+------------------+
| d | f |
+--------+------------------+
| 1.0000 | 0.99999999999991 |
+--------+------------------+
ΠΡΠΈΠΌΠ΅Ρ 2. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΎΠΌ, ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ SQL. Π’ΠΎ Π΅ΡΡΡ, Π΄Π»Ρ Π΄Π²ΡΡ ΡΠΈΡΠ΅Π» X1 ΠΈ X2, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΌΠ°ΡΡΡΠ°Π± S1 ΠΈ S2, ΠΌΠ°ΡΡΡΠ°Π± ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°: S1+S2:
mysql> SELECT .01 * .01;
+-----------+
| .01 * .01 |
+-----------+
| 0.0001 |
+-----------+
ΠΡΠΈΠΌΠ΅Ρ 3. ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠΊΠΎ:
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ROUND()) Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ C, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ²Ρ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ .
ΠΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² Ρ ΡΠΎΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π΄Π΅ΡΡ:
mysql> SELECT ROUND(2.5), ROUND(-2.5);
+------------+-------------+
| ROUND(2.5) | ROUND(-2.5) |
+------------+-------------+
| 3 | -3 |
+------------+-------------+
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ C, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΡΡΠ³ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ:
mysql> SELECT ROUND(2.5E0), ROUND(-2.5E0);
+--------------+---------------+
| ROUND(2.5E0) | ROUND(-2.5E0) |
+--------------+---------------+
| 2 | -2 |
+--------------+---------------+
ΠΡΠΈΠΌΠ΅Ρ 4. Π ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡΠ°Π²ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅, Π° Π½Π΅ ΠΊ ΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° MySQL Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
mysql> SET sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t (i TINYINT);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t SET i = 128;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SELECT i FROM t;
+------+
| i |
+------+
| 127 |
+------+
1 row in set (0.00 sec)
ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ:
mysql> SET sql_mode='STRICT_ALL_TABLES';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t (i TINYINT);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t SET i = 128;
ERROR 1264 (22003): Out of range value adjusted for column 'i' at row 1
mysql> SELECT i FROM t;
Empty set (0.00 sec)
ΠΡΠΈΠΌΠ΅Ρ 5: Π ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ ERROR_FOR_DIVISION_BY_ZERO Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π° Π½Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ NULL.
Π Π½Π΅ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ NULL:
mysql> SET sql_mode='';
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE t (i TINYINT);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t SET i = 1 / 0;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT i FROM t;
+------+
| i |
+------+
| NULL |
+------+
1 row in set (0.03 sec)
ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»Ρ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ SQL-ΡΠ΅ΠΆΠΈΠΌΡ Π°ΠΊΡΠΈΠ²Π½Ρ:
mysql> SET sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t (i TINYINT);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t SET i = 1 / 0;
ERROR 1365 (22012): Division by 0
mysql> SELECT i FROM t;
Empty set (0.01 sec)
ΠΡΠΈΠΌΠ΅Ρ 6. ΠΠΎ MySQL 5.0.3 Π»ΠΈΡΠ΅ΡΠ°Π»Ρ Ρ ΡΠΎΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ:
mysql> SELECT VERSION();
+------------+
| VERSION() |
+------------+
| 4.1.18-log |
+------------+
1 row in set (0.01 sec)
mysql> CREATE TABLE t SELECT 2.5 AS a, 25E-1 AS b;
Query OK, 1 row affected (0.07 sec)