2008-08-27 15 views
1

Essayer de faire un support d'application basée sur MySQL MS SQL, je suis tombé sur la question suivante:Comment contourner les types de champs entiers non signés non pris en charge dans MS SQL?

Je garde la auto_increment de MySQL en tant que champs entiers non signés (de différentes tailles) afin d'utiliser la gamme complète, que je Sachez qu'il n'y aura jamais de valeurs négatives. MS SQL ne supporte pas l'attribut unsigned sur tous les types entiers, donc je dois choisir entre abandonner la moitié de la plage de valeurs ou créer une solution de contournement. Une approche très naïve serait de mettre du code dans le code d'abstraction de la base de données ou dans une procédure stockée qui convertit entre les valeurs négatives du côté db et les valeurs de la plus grande partie de la plage non signée. Cela gâcherait bien sûr le tri, et cela ne fonctionnerait pas non plus avec la fonction d'identification automatique (ou est-ce que ça le ferait d'une certaine manière?).

Je ne peux pas penser à un bon solution de contournement en ce moment, y en a-t-il? Ou suis-je simplement fanatique et devrait simplement oublier la moitié de la gamme?

Éditer:
@Mike Woodhouse: Oui, je suppose que vous avez raison. Il y a toujours une voix dans ma tête disant que peut-être que je pourrais réduire la taille du champ si j'optimisais son utilisation. Mais s'il n'y a pas de moyen facile de le faire, cela ne vaut probablement pas la peine de s'en inquiéter.

Répondre

1

Quand le problème risque-t-il de devenir réel? Au vu des taux de croissance actuels, dans combien de temps pensez-vous qu'un dépassement d'entier signé se produira dans la version MS SQL?

Soyez pessimiste.

Combien de temps pensez-vous que l'application va vivre?

Pensez-vous toujours que la différence de facteur 2 est quelque chose dont vous devriez vous inquiéter?

(Je ne sais pas ce que les réponses sont, mais je pense que nous devrions nous assurer que nous avons vraiment un problème avant de chercher plus dur pour une solution)

0

Je dirais ceci ... "Comment traitons-nous normalement les différences entre les composants?"

Encapsulate ce qui varie ..

Vous devez créer une couche couche d'abstraction en vous les données d'accès pour obtenir au point où il ne se soucie pas si la base de données est MySQL ou MS ou non SQL ..

1

Je recommande d'utiliser le type de données BIGINT que cela va jusqu'à 9 223 372 036 854 775 807.

SQL Server ne prend pas en charge les valeurs signées et non signées.