Household Ingredients Compared  ›  Guides

Dairy, lactose and calcium: what your body does with milk, and where else calcium hides

Milk is the food most likely to disagree with the people reading this page. About 65% of the human population loses the ability to digest lactose after infancy, and among people of East Asian descent the figure is 70–100%. Losing that ability is not a disorder — it is the ancestral, default condition for all mammals, and the ability to keep digesting milk into adulthood is the evolutionary exception, arising in populations with a long history of dairy farming. In Singapore, that means most shoppers are, to some degree, lactose non-persistent — and yet dairy is also the most convenient source of calcium most people have. This guide is about holding both facts at once: how much lactose is actually in each dairy food, which ones most people can eat without symptoms, and where calcium comes from when milk is not an option.

What lactose intolerance actually is

Lactose is the sugar in milk. To digest it, the small intestine needs an enzyme called lactase, which splits lactose into glucose and galactose for absorption. Babies make plenty of lactase. In most of humanity, production declines after weaning — a condition called lactase non-persistence — and undigested lactose reaches the colon, where bacteria ferment it, drawing water in and producing gas. The result can be bloating, cramps, abdominal pain, intestinal noises, diarrhoea and sometimes nausea.

Three distinctions matter:

How much lactose is actually in each dairy food

Lactose lives in the watery part of milk, so anything that drains the whey or ferments it removes lactose. Ageing and straining do most of the work, which is why the numbers span nearly five orders of magnitude:

FoodLactose per 100 gPer typical serving
Whole milk4.8 gAbout 12 g in a 250 ml glass — one glass alone reaches the typical 12 g threshold.
Skim milk4.8–5.1 gAbout 12–13 g in a 250 ml glass. Removing fat does not remove lactose.
Goat milk4.1–4.5 gAbout 10–11 g in a 250 ml glass. Almost the same as cow milk — it is not a low-lactose alternative.
Plain yogurt3.8–4.7 gAbout 8–9 g in a 200 g tub. Live cultures pre-digest some lactose, and yogurt is often better tolerated than the raw figure suggests.
Greek yogurt, strained2.2–3.0 gAbout 4–6 g in a 200 g tub. Straining removes much of the lactose-carrying whey.
Cream cheese2–3.6 gAbout 0.6–1.1 g in a 30 g spread — the serving is small, so the total is low.
Cottage cheese1.8–3 gAbout 2–3 g in a 100 g serving.
Mozzarella0.7–3.3 gVaries by style; Italian-style fresh mozzarella is at the low end.
Butter0.02–0.9 gAbout 0.05 g in a 10 g pat. Almost all the whey has been churned out.
Cheddar, agedLess than 0.1 gEffectively zero in a 30 g slice. The lactose is fermented away in the first 48 hours, before ageing even starts.
ParmesanLess than 0.1 gEffectively zero. Long-aged cheeses test below the detection limit on modern analysis.
GheeAbout 0.003 gEffectively zero — heating removes the water and milk solids.
Lactose-free milkLess than 0.1 gLactase enzyme has been added to split the lactose into glucose and galactose before bottling.

Figures compiled from food-composition databases and peer-reviewed analyses, shown as ranges where sources differ. The pattern is the point: draining the whey removes most of the lactose, and ageing or fermentation breaks down what is left.

The practical consequence is that many people who think they "cannot eat dairy" can eat most of it. Aged hard cheeses — cheddar, parmesan, Swiss, Gouda, Edam — are effectively lactose-free even when they are not marketed as such. Butter and ghee are near zero. Greek yogurt is much lower than milk. The foods that actually carry the load are milk itself, fresh soft cheeses, and cream — and even those are usually tolerated in small amounts, spread across the day, or eaten with other food.

Lactose-free vs dairy-free: different words, different products

Lactose-free milk is still milk. Lactase enzyme is added to ordinary milk to split the lactose before bottling, so the product contains the same protein, calcium and vitamins as regular milk, with almost no lactose left — under 0.1 g per 100 g. It tastes slightly sweeter, because the split lactose becomes glucose and galactose, which taste sweeter than lactose itself. It is the right product for lactose intolerance, and the wrong product for a milk allergy, because the milk proteins are still there.

Dairy-free means no milk at all. Plant milks — soy, oat, almond, rice — contain no lactose because they contain no milk, and they are also free of milk protein, which is what a milk allergy needs. But they are not nutritionally equivalent to milk unless they are fortified: an unfortified oat or almond milk can contain almost no protein and almost no calcium, while a fortified soy milk can match milk on both. The check is the panel, not the word "milk" on the carton — see the plant milks section below.

"Low lactose" is not a regulated term in Singapore. A product containing less than 0.1 g of lactose per 100 g may be called lactose-free in the usage the NIH describes, but the term is not regulated by law in the same way in every market, so the number on the panel — or the absence of one — is what counts.

Calcium: how much you need, and where it hides

The Health Promotion Board's recommended dietary allowance for calcium in Singapore is 800 mg a day for adults aged 19–50, and 1,000 mg a day for adults over 51, for pregnancy and lactation, and for ages 10–18. The Healthier Choice Symbol uses 800 mg as its reference value. Calcium matters most for bone health, and the amount your body absorbs varies with vitamin D status — HPB recommends sunlight exposure of 5–30 minutes, twice a week, ideally between 10am and 3pm, to support vitamin D.

Calcium per 100 g of common foods (typical values from food-composition data; check the pack):

FoodCalcium per 100 gNotes
Dried ikan bilis, wholeAbout 1,572 mgThe highest calcium food on this list by far — but a serving is a small handful, not 100 g.
Cheddar cheeseAbout 721 mgA 30 g slice gives about 216 mg. Also high in saturated fat and sodium.
Sardines, canned with bonesAbout 382–430 mgThe bones are the calcium — eat them. Also a source of omega-3 fats.
Tofu, calcium-setAbout 164–350 mgVaries by brand and by how much calcium salt was used to set it. Check the panel: tofu set with calcium sulfate or calcium chloride carries the calcium; tofu set with nigari (magnesium chloride) carries far less.
High-calcium milkAbout 200 mgFortified milk; ordinary full-cream milk is about 93–120 mg per 100 ml.
Fortified soy milkAbout 170 mgOnly if fortified — unfortified soy milk is much lower. Check for calcium on the panel.
YogurtAbout 110–121 mgPlain yogurt; Greek yogurt is similar at about 110 mg.
Low-fat milkAbout 136 mgRemoving fat does not remove calcium.
Cooked kaleAbout 150 mgLeafy greens contribute, but the calcium is less well absorbed than from dairy.

Two points about this table. First, calcium per 100 g is not calcium per serving: ikan bilis wins per 100 g, but a serving is 20–30 g, while a glass of milk is 250 ml — so a glass of milk (about 230–300 mg) still delivers more calcium in one serving than a handful of ikan bilis (about 300–470 mg per 30 g, comparable) or a slice of cheddar (about 216 mg). Second, absorption differs: calcium from dairy is well absorbed; calcium from leafy greens is absorbed less well because of oxalates; and vitamin D status changes how much of any of it your body takes up. The table is a guide to content, not a ranking of usefulness.

For the health claim: under Singapore's rules, a food can carry the diet-related health claim that a healthy diet with adequate calcium and vitamin D helps achieve strong bones and may reduce the risk of osteoporosis only if one serving contains at least 50% of the calcium RDA (taken as 800 mg) — that is, at least 400 mg per serving — and the product carries the Healthier Choice Symbol. A product that says "good source of calcium" without meeting that bar is using the phrase loosely.

Plant milks: how to read the carton

Plant milks vary far more than dairy milk does, because there is no standard recipe. The same shelf can hold a soy milk with 3 g of protein and 170 mg of calcium per 100 ml next to an oat milk with 1 g of protein and almost no calcium. Four checks:

Label traps

Practical checks

Three checks, in order:

  1. Find your own threshold before you cut dairy out. Most people with lactase non-persistence can handle about 12 g of lactose — a cup of milk — and many can handle aged cheese, butter and Greek yogurt without any symptoms at all. Cutting out all dairy because milk disagrees with you throws away the cheapest calcium and protein on the shelf. Test small amounts, with food, and see what your body actually does.
  2. Read lactose and calcium together. For dairy, the lactose figure tells you whether you can eat it; the calcium figure tells you whether it is worth eating. Aged cheddar gives you about 216 mg of calcium in a slice with almost no lactose — the best of both. Fresh milk gives you about 230–300 mg per glass with about 12 g of lactose — the trade-off to manage.
  3. For plant milks, check calcium and protein first. A fortified soy milk matches dairy on both. An unfortified oat or almond milk matches neither. The carton is not the food — the panel is.

Pages where these checks are most useful: fresh milk, flavoured and chocolate milk, yogurt, kefir, cheddar and hard cheese, cottage and soft cheese, cream cheese and cheese spread, mozzarella cheese, butter, plant milks, tofu and tempeh, canned sardines, dried seafood and anchovies and condensed and evaporated milk, plus the protein guide and the fermented foods guide.

What this page is not